package com.meeting.meetingroom_api.service;

import com.meeting.meetingroom_api.dto.MeetingRoomCreateDto;
import com.meeting.meetingroom_api.dto.MeetingRoomDto;
import com.meeting.meetingroom_api.dto.MeetingRoomQueryDto;
import com.meeting.meetingroom_api.dto.MeetingRoomUpdateDto;
import com.meeting.meetingroom_api.dto.MeetingRoomRecommendationDto;
import com.meeting.meetingroom_api.enums.RoomStatus;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface MeetingRoomService {
    MeetingRoomDto createMeetingRoom(MeetingRoomCreateDto createDto);
    MeetingRoomDto getMeetingRoomById(Integer roomId);
    MeetingRoomDto getMeetingRoomByIdAndPeriod(Integer roomId,MeetingRoomQueryDto queryDto);
    MeetingRoomDto getMeetingRoomByName(String name);
    List<MeetingRoomDto> getAllMeetingRooms(); // Simple list, consider pagination for large sets
    Page<MeetingRoomDto> findMeetingRooms(MeetingRoomQueryDto queryDto, Pageable pageable);
    MeetingRoomDto updateMeetingRoom(Integer roomId, MeetingRoomUpdateDto updateDto);
    MeetingRoomDto updateMeetingRoomStatus(Integer roomId, RoomStatus newStatus);
    void deleteMeetingRoom(Integer roomId);

    // 根据客户需求推荐合适的会议室
    Page<MeetingRoomDto> recommendMeetingRooms(MeetingRoomRecommendationDto recommendationDto, Pageable pageable);

    // 根据状态查询会议室
    List<MeetingRoomDto> getRoomsByStatus(RoomStatus status);

    MeetingRoomDto changeRoomStatus(Integer roomId, RoomStatus newStatus, String roomConditionNotes,Integer employeeId);

    // 管理员专用：软删除相关方法
    void deleteMeetingRoom(Integer roomId, Integer adminId); // 带操作人ID的删除方法
    Page<MeetingRoomDto> getDeletedMeetingRooms(Pageable pageable); // 查看已删除的会议室
    MeetingRoomDto restoreMeetingRoom(Integer roomId, Integer adminId); // 恢复删除的会议室
}